As the size and complexity of software systems increases, the reuse of independent pieces of software, combined in different ways to implement complex software systems, has become a widely accepted practice. A scaling-up of a software entity, through the addition of a new functionality (or the installation of a new application) can increase in the number of different components, inter-dependencies and interactions.
Software deployment across a distributed system many times results in a large number of installation options. These installation options can include nodes with different operating systems, resources, components, and components with contradicting support requirements. Current installation tools require predefined deployment topologies and predefined computing systems (e.g. machines). These problems derive from the essential complexity of the software requirements and dependencies and their nonlinear inter-relationships. The exponential increase of support requirements complexity is calling for additional levels of expert knowledge.
Currently, various package managing utilities are available that help to keep track various packages installed on different systems. For example, Debian has a low level package managing utility that can list all packages on the Linux system with such information as current status of the package, the errors (if any), short description of uses and more. *BSD Ports systems have built-in support for handling varying dependencies while managing the compilation and installation of third-party software that has been ported to BSD. Utilities such as Solution Install and TPM (IBM Tivoli products) also have configuration knowledge for each system on the network. However, even with these packaging managing utilities, software deployment systems still suffer from the problems discussed above.
Furthermore, administrators are usually given two choices for provisioning systems. The first is “granular” provisioning, whereby a system administrator manually installs each required application onto individual computers. This strategy is obviously inefficient. The second provisioning model is the “role-based” or “image-based” model, used for example, in IBM's Tivoli Provisioning Manager (TPM). This solution entails defining complete software stacks to install on various machines, each of which is assigned one or more roles. This automation saves administrator time and works well for existing computing grid users who tend to have predefined software stacks. However, image-based provisioning models do not work well for machines that utilize constantly changing applications (such as new revisions or applications with new software). The image-based provisioning models lose the fine-grained control inherent in the granular-provisioning model and therefore, do not work well when applied to the problem of scheduling across networks of heterogeneous nodes.
Therefore a need exists to overcome the problems with the prior art as discussed above.